package com.cheer.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cheer.dto.ApplicantContactUpdateDTO;
import com.cheer.dto.ApplicantUpdateDTO;
import com.cheer.entity.Applicant;
import com.cheer.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;

public interface ApplicantService extends IService<Applicant> {

    /**
     * 查询集体
     *
     * @param accountId 账号Id
     */
    ApplicantVO getByAccountId(Long accountId);

    /**
     * 查询注册信息
     *
     * @param accountId 账户Id
     */
    RegisterVO getRegisterByAccountId(Long accountId);

    /**
     * 修改集体
     *
     * @param accountId          账号Id
     * @param applicantUpdateDTO 修改内容
     */
    void updateApplicant(Long accountId, ApplicantUpdateDTO applicantUpdateDTO);

    /**
     * 分页查询集体
     *
     * @param pageNum       页码
     * @param pageSize      每页数量
     * @param orgId         机构Id
     * @param applicantName 集体名称
     * @param contactPerson 负责人
     * @param title         文明号等级
     */
    Page<ApplicantPageVO> getPage(Integer pageNum, Integer pageSize, Long orgId, String applicantName, String contactPerson,
                                  Integer title);

    /**
     * 重置密码
     *
     * @param applicantId 集体Id
     */
    void resetPassword(Long applicantId);

    /**
     * 删除集体
     *
     * @param applicantIds 集体Id
     */
    void delete(List<Long> applicantIds, Long orgId);

    /**
     * 查询集体联系信息
     *
     * @param applicantId 集体Id
     */
    ApplicantContactVO getContact(Long applicantId);

    /**
     * 修改集体联系信息
     *
     * @param applicantContactUpdateDTO 修改内容
     */
    void updateContact(ApplicantContactUpdateDTO applicantContactUpdateDTO);

    /**
     * 导出集体
     *
     * @param orgId         机构Id
     * @param applicantName 集体名称
     * @param contactPerson 负责人
     * @param title         文明号等级
     */
    void download(Long orgId, String applicantName, String contactPerson, Integer title);

    /**
     * 分页查询注册审核集体
     *
     * @param pageNum         页码
     * @param pageSize        每页数量
     * @param orgId           机构Id
     * @param applicantName   集体名称
     * @param contactPerson   负责人
     * @param status          注册状态
     * @param applicantStatus 文明号状态
     * @param submitted       是否提交
     * @param reviewType      审核类型
     * @param startTime       起始时间
     * @param endTime         结束时间
     */
    Page<ApplicantRegisterVO> getReviewPage(Integer pageNum, Integer pageSize, Long orgId, String applicantName,
                                            String contactPerson, Integer status, Integer applicantStatus,
                                            Boolean submitted, Integer reviewType, Integer registerStatus,
                                            Date startTime, Date endTime);


    /**
     * 分页查询注册审核集体
     *
     * @param pageNum         页码
     * @param pageSize        每页数量
     * @param orgId           机构Id
     * @param applicantName   集体名称
     * @param contactPerson   负责人
     */
    Page<ApplicantReferenceListVO> getApplicantReferenceList(Integer pageNum, Integer pageSize, Integer vintage,
                                                             Long orgId, Integer isApply, Integer registerStatus,
                                                             String applicantName, String contactPerson);

    /**
     * 导出注册审核集体
     *
     * @param orgId           机构Id
     * @param applicantName   集体名称
     * @param contactPerson   负责人
     * @param status          注册状态
     * @param applicantStatus 文明号状态
     * @param submitted       是否提交
     * @param reviewType      审核类型
     * @param startTime       起始时间
     * @param endTime         结束时间
     */
    void downloadReview(Long orgId, String applicantName, String contactPerson, Integer status, Integer applicantStatus,
                        Boolean submitted, Integer reviewType, Integer registerStatus, Date startTime, Date endTime);

    /**
     * 通过注册审核
     *
     * @param applicantId 集体Id
     */
    void approveRegister(Long applicantId, Long accountId, Long orgId);

    /**
     * 不通过注册审核
     *
     * @param applicantId 集体Id
     */
    void denyRegister(Long applicantId, Long accountId, Long orgId, String cause);

    /**
     * 查询集体
     *
     * @param applicantId 集体Id
     */
    ApplicantVO getByApplicantId(Long applicantId);

    /**
     * 批量通过注册审核
     *
     * @param applicantIds 集体Id
     */
    void batchApproveRegister(List<Long> applicantIds, Long accountId, Long orgId);

    /**
     * 批量不通过注册审核
     *
     * @param applicantIds 集体Id
     */
    void batchDenyRegister(List<Long> applicantIds, Long accountId, Long orgId);

    /**
     * 查看日志
     *
     * @param applicantId 集体Id
     * @param type        日志类型
     */
    List<StandingBookReviewLogVO> getLog(Long applicantId, Integer type);

    /**
     * 查看日志
     *
     * @param accountId 账户Id
     * @param type      日志类型
     */
    List<StandingBookReviewLogVO> getLogByAccountId(Long accountId, Integer type);

    /**
     * 更新申报单位表ID
     * @param fileUrl 保存的文件地址
     * @param applicantId 申报ID
     */
    void updateCheckDoc(String fileUrl, Long applicantId);


    /**
     * excel 导出
     * @param vintage
     * @param orgId
     * @param isPost
     * @param registerStatus
     * @param contactPerson
     * @param applicantName
     */
    void applicantReferenceExport( Integer vintage,
                                   Long orgId, Integer isPost, Integer registerStatus,
                                   String contactPerson, String applicantName  );


    /**
     * 根据账号获取实体
     * @param accountId
     * @return
     */
    Applicant getEntityByAccountId(Long accountId);

    /**
     * 给前端提示
     * @return
     */
    Integer getHint();

    /**
     * 驳回后提交的记录
     * @param pageNum
     * @param pageSize
     * @param adminOrgId
     * @return
     */
    Page<ApplicantReferenceListVO> submitAgain(Integer pageNum, Integer pageSize, Long adminOrgId);


    /**
     * 驳回后提交
     * @param adminOrgId
     * @return
     */
    Integer submitAgainNumber(Long adminOrgId);


    /**
     * 创建页面驳回后重新提交
     * @param pageNum
     * @param pageSize
     * @param adminOrgId
     * @return
     */
    Page<ApplicantRegisterVO> createSubmitAgain(Integer pageNum, Integer pageSize, Long adminOrgId);

    /**
     * 创建页面中驳回后提交
     * @param adminOrgId
     * @return
     */
    Integer createSubmitAgainNumber(Long adminOrgId);



}
